Einfacher systemübergreifender Versionsvergleich
Im SAP-Umfeld gibt es in der Regel eine Drei-System-Landschaft: Die Entwicklung und das Customizing finden im Entwicklungssystem statt. Zum Test wird die Programmierung in das Qualitätssicherungssystem (Q-System) transportiert. Dort finden weitere Tests mit produktionsnahen Daten statt. Dann wird das Programm eventuell noch einmal nachgebessert und es wird eine neue Version in das Q-System transportiert. Nach erfolgreichen Tests werden alle Transporte in das Produktionssystem transportiert.
Durch längere “Standzeiten” im Q-System kann es dazu kommen, dass man den Überblick darüber verliert, welche Stände in welchem System vorhanden sind. Die manuelle Prüfung der einzelnen Objekte ist mehr als mühsam.
Update
Siehe Beitrag Einfacher systemübergreifender Versionsvergleich (2)
Versionsvergleich
Das untenstehende Programm kann einen Versionsvergleich zwischen dem aktuellen und einem anderen SAP-System durchführen. Folgende Eingaben sind möglich:
- Transportauftrag
- Klasse
- Programm
- Funktionsgruppe
Der Vergleich wird mit Hilfe des Funktionsbausteins SVRS_MASSCOMPARE_ACT_OBJECTS durchgeführt. Dieser Baustein hat eine sehr wichtige Funktion: Er ermittelt selbstständig die Unterobjekte zu einem Hauptobjekt. Für Programme bedeutet dies, dass alle Includes, Dynpros und sonstigen Programmobjekte ermittelt und verglichen werden. Bei Klassen werden alle Sections als auch die einzelnen Methoden berücksichtigt.
Ergebnisliste
Das Ergebnis des Vergleiches ist eine Liste, in der die Objekte rot markiert werden, die eine andere Version als im aktuellen System haben.
Mit einem Doppelklick auf eine Zeile gelangst du in den direkten Sourcecode-Vergleich des gewählten Objektes.
Vergleich von Klassenquellcode in Eclipse
Obwohl man in der SE24 von der Formularansicht auf die Ansicht Quelltextbasiert wechseln kann, ist ein kompletter Versionsvergleich der Klasse nicht möglich. Um herauszufinden, welche Methode in einem anderen System eventuell eine andere Version hat, muss für jede Methode separat ein Versionsvergleich durchgeführt werden. Hier spielt Eclipse wieder seine enormen Möglichkeiten aus, denn in Eclipse ist genau das mit der Tastenkombination Ctrl +Alt+C “Compare with <project>” möglich.
Für das SAP-System, mit dem der Versionsvergleich durchgeführt werden soll, muss als ABAP-Project in Eclipse eingerichtet sein.
Code
REPORT zz_compare_versions.
DATA gs_vrs_compare TYPE vrs_compare_item.
PARAMETERS pa_req TYPE trkorr DEFAULT ''.
PARAMETERS pa_cls TYPE seoclsname DEFAULT 'ZCL_DUMMY'.
PARAMETERS pa_rep TYPE syrepid DEFAULT 'ZZDUMMY01'.
PARAMETERS pa_fgr TYPE syrepid DEFAULT 'Z_DUMMY_01'.
PARAMETERS cb_req RADIOBUTTON GROUP mode DEFAULT 'X'.
PARAMETERS cb_cls RADIOBUTTON GROUP mode .
PARAMETERS cb_rep RADIOBUTTON GROUP mode .
PARAMETERS cb_fgr RADIOBUTTON GROUP mode .
PARAMETERS pa_rdt TYPE rfcdest DEFAULT 'Q01_100'.
START-OF-SELECTION.
CASE 'X'.
WHEN cb_req.
PERFORM compare_request USING pa_req.
WHEN cb_cls.
PERFORM compare_object USING 'CLAS' pa_cls.
WHEN cb_rep.
PERFORM compare_object USING 'PROG' pa_rep.
WHEN cb_fgr.
PERFORM compare_object USING 'FUGR' pa_fgr.
ENDCASE.
AT LINE-SELECTION.
CHECK gs_vrs_compare IS NOT INITIAL.
SUBMIT rsvrsrs3
WITH log_dest = space
WITH log_dst1 = pa_rdt
WITH objnam2 = gs_vrs_compare-fragname
WITH objname = gs_vrs_compare-fragname
WITH objtyp1 = gs_vrs_compare-fragment
WITH objtyp2 = gs_vrs_compare-fragment
WITH versno1 = '99998'
WITH versno2 = '99998' AND RETURN.
FORM compare_request USING iv_ta TYPE trkorr..
DATA lt_request TYPE trwbo_request .
CALL FUNCTION 'TR_READ_REQUEST'
EXPORTING
iv_read_e070 = 'X'
iv_read_objs_keys = 'X'
iv_trkorr = pa_req
CHANGING
cs_request = lt_request
EXCEPTIONS
error_occured = 1
no_authorization = 2
OTHERS = 3.
IF sy-subrc <> 0.
CASE sy-subrc.
WHEN 1.
WRITE: 'Error "error_occured(1)" at TR_READ_REQUEST' COLOR COL_NEGATIVE.
WHEN 2.
WRITE: 'Error "no_authorization(2)" at TR_READ_REQUEST' COLOR COL_NEGATIVE.
ENDCASE.
RETURN.
ENDIF.
PERFORM compare USING lt_request-objects.
ENDFORM.
FORM compare USING it_objects TYPE trwbo_t_e071.
DATA lt_cmp_result TYPE vrs_compare_item_tab.
CALL FUNCTION 'SVRS_MASSCOMPARE_ACT_OBJECTS'
EXPORTING
it_e071 = it_objects
iv_rfcdest_a = space
iv_rfcdest_b = pa_rdt
iv_filter_lang = 'X'
iv_delete_lang = ' '
iv_abap_ignore_case = 'X'
iv_abap_condense = 'X'
iv_abap_ignore_comments = 'X'
iv_abap_equivalence = 'X'
iv_with_gui_progress = 'X'
iv_ignore_report_text = ' '
IMPORTING
et_compare_items = lt_cmp_result
EXCEPTIONS
rfc_error = 1
not_supported = 2
OTHERS = 3.
IF sy-subrc <> 0.
CASE sy-subrc.
WHEN 1.
WRITE: 'Error "rfc_error(1)" at SVRS_MASSCOMPARE_ACT_OBJECTS' COLOR COL_NEGATIVE.
WHEN 2.
WRITE: 'Error "not_supported(2)" at SVRS_MASSCOMPARE_ACT_OBJECTS' COLOR COL_NEGATIVE.
ENDCASE.
RETURN.
ENDIF.
LOOP AT lt_cmp_result INTO gs_vrs_compare.
WRITE: /
gs_vrs_compare-fragment,
gs_vrs_compare-fragname.
IF gs_vrs_compare-equal = abap_true.
WRITE icon_led_green AS ICON HOTSPOT ON.
ELSE.
WRITE icon_led_red AS ICON HOTSPOT ON.
ENDIF.
DATA lt_ver_list TYPE STANDARD TABLE OF vrsn.
DATA lt_versions TYPE STANDARD TABLE OF vrsd.
DATA lv_obj_name TYPE versobjnam.
lv_obj_name = gs_vrs_compare-fragname.
CALL FUNCTION 'SVRS_GET_VERSION_DIRECTORY_46'
EXPORTING
objname = lv_obj_name
objtype = gs_vrs_compare-fragment
TABLES
lversno_list = lt_ver_list
version_list = lt_versions
EXCEPTIONS
no_entry = 1
OTHERS = 2.
TRY .
WRITE lt_versions[ 2 ]-datum.
CATCH cx_sy_itab_line_not_found.
ENDTRY.
CLEAR lt_ver_list.
CLEAR lt_versions.
CALL FUNCTION 'SVRS_GET_VERSION_DIRECTORY_46'
DESTINATION pa_rdt
EXPORTING
objname = lv_obj_name
objtype = gs_vrs_compare-fragment
TABLES
lversno_list = lt_ver_list
version_list = lt_versions
EXCEPTIONS
no_entry = 1
OTHERS = 2.
TRY .
WRITE lt_versions[ 2 ]-datum.
CATCH cx_sy_itab_line_not_found.
ENDTRY.
HIDE gs_vrs_compare.
ENDLOOP.
CLEAR gs_vrs_compare.
ENDFORM.
FORM compare_object USING iv_type TYPE c iv_obj TYPE c.
DATA(lt_objects) = VALUE trwbo_t_e071(
( pgmid = 'R3TR' object = iv_type obj_name = iv_obj ) ).
PERFORM compare USING lt_objects.
ENDFORM.
- 7. December: Excel Racing Simulation – Root Vole Race - 7. Dezember 2024
- 5. December: ABAPConf - 5. Dezember 2024
- 4. December: Only a lazy developer is a good developer - 4. Dezember 2024